/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package dao.questionnaire;

import entities.questionnaire.Questionnaire;
import entities.utilisateur.AbstractRepondant;
import entities.utilisateur.Createur;
import entities.utilisateur.RepondantAuthentifie;
import entities.utilisateur.Valideur;
import java.util.List;
import javax.ejb.Local;

/**
 *
 * @author aurelien.emery
 */
@Local
public interface DaoQuestionnaireLocal {

    void create(Questionnaire questionnaire);

    void edit(Questionnaire questionnaire);

    void remove(Questionnaire questionnaire);

    Questionnaire find(Object id);

    List<Questionnaire> findAll();

    List<Questionnaire> findRange(int[] range);

    void detach(Questionnaire questionnaire);

    int count();

    /**
     * Renvoi les questionnaires disponibles pour réponse pour un id d'Utilisateur donné
     * @return Une ArrayList de questionnaires.
     * @return Null si rien trouvé
     */
    public List<Questionnaire> chercherQuestionnaireDispo(AbstractRepondant user);

    /**
     * Renvoi les questionnaires disponibles pour réponse pour un id d'Utilisateur donné pour une plage
     * @return Une ArrayList de questionnaires.
     * @return Null si rien trouvé
     */
    public List<Questionnaire> chercherQuestionnaireDispoRange(AbstractRepondant user, int[] range);

    /**
     * Renvoi les questionnaires à valider
     * @return Une ArrayList de questionnaires.
     * @return Null si rien trouvé
     */
    public List<Questionnaire> chercherQuestionnaireAValider();

    /**
     * Renvoi les questionnaires en creation pour un id d'Utilisateur donné
     * @return Une ArrayList de questionnaires.
     * @return Null si rien trouvé
     */
    public List<Questionnaire> chercherQuestionnaireEnCreation(Createur user);
/*
 * Methode indisponible dans notre application car la date de diffusion est choisi pendant la creation.
 *
 */

//    /**
//     * Renvoi les questionnaires à diffuser pour un id d'Utilisateur donné
//     * @return Une ArryList de questionnaires.
//     * @return Null si rien trouvé
//     */
//    public ArrayList<Questionnaire> ChercherQuestionnaireADiffuser(Long idUser);

    /**
     * Valide un questionnaire
     * @param questionnaire Questionaire a valider
     * @param valideur valideur
     */
    public void valide(Questionnaire questionnaire, Valideur valideur);

    /**
     * Methode renvoyant la liste des questionnaire à Passer pour un user donnée
     * @param user
     * @return Liste de questionnaire
     */
    public List<Questionnaire> chercherQuestionnaireAPasser(AbstractRepondant user);

    /**
     * Methode renvoyant la liste des questionnaire à Diffuser pour la date d'aujourd'hui 
     * @return Liste de questionnaire
     */
    public List<Questionnaire> chercherQuestionnaireADiffuser();

    /**
     * Méthode renvoyant le dernier id inséré en base
     * @return le dernier id de questionnaire inséré
     */
    public long getLastIdQuestionnaire();
}
